package com.ruangong.GitClient.app.GitHubFile;

import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import androidx.appcompat.app.AppCompatActivity;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.ruangong.GitClient.GitHubAPI.*;
import com.ruangong.GitClient.R;

import java.io.IOException;
import java.lang.reflect.Type;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

public class FileViewerActivity extends AppCompatActivity {

    private ListView listView;
    private GitHubFileAdapter adapter;
    private List<GitHubFile> fileList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_file_viewer);

        listView = findViewById(R.id.listView);
        fileList = new ArrayList<>();
        adapter = new GitHubFileAdapter(this, fileList);
        listView.setAdapter(adapter);

        new FetchFilesTask().execute();

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                GitHubFile selectedFile = fileList.get(position);
                if (selectedFile.getType().equals("file")) {
                    // 如果是文件，显示文件内容
                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                            // 在新线程中执行网络请求
                            selectedFile.showFileContents(FileViewerActivity.this);
                        }
                    }).start();
                } else if (selectedFile.getType().equals("dir")) {
                    // 如果是文件夹，递归显示文件夹内容
                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                            // 在新线程中执行文件夹内容显示操作
                            try {
                                // 调用showDir()方法获取目录内容
                                final List<GitHubFile> directoryContents = selectedFile.showDirContent();

                                // 切换到主线程更新UI
                                runOnUiThread(new Runnable() {
                                    @Override
                                    public void run() {
                                        // 更新ListView的适配器以显示目录内容
                                        fileList.clear();
                                        fileList.addAll(directoryContents);
                                        adapter.notifyDataSetChanged();
                                    }
                                });
                            } catch (Exception e) {
                                throw new RuntimeException(e);
                            }
                        }
                    }).start();
                }
            }
        });
    }

    private class FetchFilesTask extends AsyncTask<Void, Void, List<GitHubFile>> {

        @Override
        protected List<GitHubFile> doInBackground(Void... voids) {
            List<GitHubFile> fileList = new ArrayList<>();
            try {
                // 设置 GitHub 的访问令牌
//                String token = "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";
                String token = "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";

                // 创建 GitHubUser 对象并展示信息
                GitHubUser gitHubUser = new GitHubUser(token);
                gitHubUser.showInfo();

                // 从 MoMingUtil 中获取仓库信息
                GitHubRepository repo = GitHubRepository.fromJson(MoMingUtil.getRepositoryInfo("SilverXQI", "Silver"));

                // 获取仓库内容的 URL
                URL url = new URL(repo.getContents_url());

                // 使用 MoMingUtil 创建连接
                HttpURLConnection conn = MoMingUtil.createConnection(url);
                conn.setRequestProperty("Authorization", "token " + token);
                conn.setRequestProperty("Accept", "application/vnd.github.v3+json");

                // 检查响应代码
                if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
                    throw new RuntimeException("Failed: HTTP error code: " + conn.getResponseCode());
                }

                try {
                    // 从连接获取输入流，并转换为字符串
                    String jsonInput = MoMingUtil.getHttpURLConnectionContent(conn);


                    // 创建 TypeToken 对象
                    Type listType = new TypeToken<List<GitHubFile>>() {}.getType();

                    // 使用 Gson 解析 JSON 字符串为 List<GitHubFile>
                    fileList = new Gson().fromJson(jsonInput, listType);
                } catch (IOException e) {
                    // 异常处理
                    Log.e("FetchFilesTask", "Error fetching files", e);
                } finally {
                    // 关闭连接
                    conn.disconnect();
                }
            } catch (Exception e) {
                // 异常处理
                Log.e("FetchFilesTask", "Error processing task", e);
            }

            // 返回解析后的文件列表
            return fileList;
        }

        @Override
        protected void onPostExecute(List<GitHubFile> result) {
            super.onPostExecute(result);
            adapter.clear();  // 清空适配器，防止重复数据
            fileList.addAll(result);
            adapter.notifyDataSetChanged();
        }
    }
}